// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package de.greenrobot.dao;
import android.database.CrossProcessCursor;
import android.database.Cursor;
import android.database.CursorWindow;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import de.greenrobot.dao.identityscope.IdentityScope;
import de.greenrobot.dao.identityscope.IdentityScopeLong;
import de.greenrobot.dao.internal.DaoConfig;
import de.greenrobot.dao.internal.FastCursor;
import de.greenrobot.dao.internal.TableStatements;
import de.greenrobot.dao.query.Query;
import de.greenrobot.dao.query.QueryBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
// Referenced classes of package de.greenrobot.dao:
// Property, DaoException, DaoLog, AbstractDaoSession
public abstract class AbstractDao
{
protected final DaoConfig config;
protected final SQLiteDatabase db;
protected IdentityScope identityScope;
protected IdentityScopeLong identityScopeLong;
protected final int pkOrdinal;
protected final AbstractDaoSession session;
protected TableStatements statements;
public AbstractDao(DaoConfig daoconfig)
{
this(daoconfig, null);
}
public AbstractDao(DaoConfig daoconfig, AbstractDaoSession abstractdaosession)
{
config = daoconfig;
session = abstractdaosession;
db = daoconfig.db;
identityScope = daoconfig.getIdentityScope();
if (identityScope instanceof IdentityScopeLong)
{
identityScopeLong = (IdentityScopeLong)identityScope;
}
statements = daoconfig.statements;
int i;
if (daoconfig.pkProperty != null)
{
i = daoconfig.pkProperty.ordinal;
} else
{
i = -1;
}
pkOrdinal = i;
}
private void deleteByKeyInsideSynchronized(Object obj, SQLiteStatement sqlitestatement)
{
if (obj instanceof Long)
{
sqlitestatement.bindLong(1, ((Long)obj).longValue());
} else
{
if (obj == null)
{
throw new DaoException("Cannot delete entity, key is null");
}
sqlitestatement.bindString(1, obj.toString());
}
sqlitestatement.execute();
}
private void deleteInTxInternal(Iterable iterable, Iterable iterable1)
{
SQLiteStatement sqlitestatement;
assertSinglePk();
sqlitestatement = statements.getDeleteStatement();
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
IdentityScope identityscope = identityScope;
ArrayList arraylist;
arraylist = null;
if (identityscope == null)
{
break MISSING_BLOCK_LABEL_53;
}
identityScope.lock();
arraylist = new ArrayList();
if (iterable == null)
{
break MISSING_BLOCK_LABEL_153;
}
Iterator iterator1 = iterable.iterator();
_L2:
Object obj1;
do
{
if (!iterator1.hasNext())
{
break MISSING_BLOCK_LABEL_153;
}
obj1 = getKeyVerified(iterator1.next());
deleteByKeyInsideSynchronized(obj1, sqlitestatement);
} while (arraylist == null);
arraylist.add(obj1);
if (true) goto _L2; else goto _L1
_L1:
Exception exception2;
exception2;
if (identityScope != null)
{
identityScope.unlock();
}
throw exception2;
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
if (iterable1 == null)
{
break MISSING_BLOCK_LABEL_209;
}
Iterator iterator = iterable1.iterator();
_L3:
Object obj;
do
{
if (!iterator.hasNext())
{
break MISSING_BLOCK_LABEL_209;
}
obj = iterator.next();
deleteByKeyInsideSynchronized(obj, sqlitestatement);
} while (arraylist == null);
arraylist.add(obj);
goto _L3
if (identityScope != null)
{
identityScope.unlock();
}
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
if (arraylist == null)
{
break MISSING_BLOCK_LABEL_257;
}
if (identityScope != null)
{
identityScope.remove(arraylist);
}
db.endTransaction();
return;
}
private long executeInsert(Object obj, SQLiteStatement sqlitestatement)
{
if (!db.isDbLockedByCurrentThread()) goto _L2; else goto _L1
_L1:
sqlitestatement;
JVM INSTR monitorenter ;
long l;
bindValues(sqlitestatement, obj);
l = sqlitestatement.executeInsert();
sqlitestatement;
JVM INSTR monitorexit ;
_L4:
updateKeyAfterInsertAndAttach(obj, l, true);
return l;
Exception exception2;
exception2;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception2;
_L2:
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
bindValues(sqlitestatement, obj);
l = sqlitestatement.executeInsert();
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
if (true) goto _L4; else goto _L3
_L3:
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
}
private void executeInsertInTx(SQLiteStatement sqlitestatement, Iterable iterable, boolean flag)
{
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
if (identityScope != null)
{
identityScope.lock();
}
Iterator iterator = iterable.iterator();
_L1:
Object obj;
if (!iterator.hasNext())
{
break MISSING_BLOCK_LABEL_124;
}
obj = iterator.next();
bindValues(sqlitestatement, obj);
if (!flag)
{
break MISSING_BLOCK_LABEL_117;
}
updateKeyAfterInsertAndAttach(obj, sqlitestatement.executeInsert(), false);
goto _L1
Exception exception2;
exception2;
if (identityScope != null)
{
identityScope.unlock();
}
throw exception2;
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
sqlitestatement.execute();
goto _L1
if (identityScope != null)
{
identityScope.unlock();
}
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
return;
}
protected void assertSinglePk()
{
if (config.pkColumns.length != 1)
{
throw new DaoException((new StringBuilder()).append(this).append(" (").append(config.tablename).append(") does not have a single-column primary key").toString());
} else
{
return;
}
}
protected void attachEntity(Object obj)
{
}
protected final void attachEntity(Object obj, Object obj1, boolean flag)
{
label0:
{
attachEntity(obj1);
if (identityScope != null && obj != null)
{
if (!flag)
{
break label0;
}
identityScope.put(obj, obj1);
}
return;
}
identityScope.putNoLock(obj, obj1);
}
protected abstract void bindValues(SQLiteStatement sqlitestatement, Object obj);
public long count()
{
return DatabaseUtils.queryNumEntries(db, (new StringBuilder()).append('\'').append(config.tablename).append('\'').toString());
}
public void delete(Object obj)
{
assertSinglePk();
deleteByKey(getKeyVerified(obj));
}
public void deleteAll()
{
db.execSQL((new StringBuilder()).append("DELETE FROM '").append(config.tablename).append("'").toString());
if (identityScope != null)
{
identityScope.clear();
}
}
public void deleteByKey(Object obj)
{
SQLiteStatement sqlitestatement;
assertSinglePk();
sqlitestatement = statements.getDeleteStatement();
if (!db.isDbLockedByCurrentThread()) goto _L2; else goto _L1
_L1:
sqlitestatement;
JVM INSTR monitorenter ;
deleteByKeyInsideSynchronized(obj, sqlitestatement);
sqlitestatement;
JVM INSTR monitorexit ;
_L4:
if (identityScope != null)
{
identityScope.remove(obj);
}
return;
Exception exception2;
exception2;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception2;
_L2:
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
deleteByKeyInsideSynchronized(obj, sqlitestatement);
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
if (true) goto _L4; else goto _L3
_L3:
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
}
public void deleteByKeyInTx(Iterable iterable)
{
deleteInTxInternal(null, iterable);
}
public transient void deleteByKeyInTx(Object aobj[])
{
deleteInTxInternal(null, Arrays.asList(aobj));
}
public void deleteInTx(Iterable iterable)
{
deleteInTxInternal(iterable, null);
}
public transient void deleteInTx(Object aobj[])
{
deleteInTxInternal(Arrays.asList(aobj), null);
}
public boolean detach(Object obj)
{
if (identityScope != null)
{
Object obj1 = getKeyVerified(obj);
return identityScope.detach(obj1, obj);
} else
{
return false;
}
}
public String[] getAllColumns()
{
return config.allColumns;
}
public SQLiteDatabase getDatabase()
{
return db;
}
protected abstract Object getKey(Object obj);
protected Object getKeyVerified(Object obj)
{
Object obj1 = getKey(obj);
if (obj1 == null)
{
if (obj == null)
{
throw new NullPointerException("Entity may not be null");
} else
{
throw new DaoException("Entity has no key");
}
} else
{
return obj1;
}
}
public String[] getNonPkColumns()
{
return config.nonPkColumns;
}
public String[] getPkColumns()
{
return config.pkColumns;
}
public Property getPkProperty()
{
return config.pkProperty;
}
public Property[] getProperties()
{
return config.properties;
}
public AbstractDaoSession getSession()
{
return session;
}
TableStatements getStatements()
{
return config.statements;
}
public String getTablename()
{
return config.tablename;
}
public long insert(Object obj)
{
return executeInsert(obj, statements.getInsertStatement());
}
public void insertInTx(Iterable iterable)
{
insertInTx(iterable, isEntityUpdateable());
}
public void insertInTx(Iterable iterable, boolean flag)
{
executeInsertInTx(statements.getInsertStatement(), iterable, flag);
}
public transient void insertInTx(Object aobj[])
{
insertInTx(((Iterable) (Arrays.asList(aobj))), isEntityUpdateable());
}
public long insertOrReplace(Object obj)
{
return executeInsert(obj, statements.getInsertOrReplaceStatement());
}
public void insertOrReplaceInTx(Iterable iterable)
{
insertOrReplaceInTx(iterable, isEntityUpdateable());
}
public void insertOrReplaceInTx(Iterable iterable, boolean flag)
{
executeInsertInTx(statements.getInsertOrReplaceStatement(), iterable, flag);
}
public transient void insertOrReplaceInTx(Object aobj[])
{
insertOrReplaceInTx(((Iterable) (Arrays.asList(aobj))), isEntityUpdateable());
}
public long insertWithoutSettingPk(Object obj)
{
SQLiteStatement sqlitestatement;
sqlitestatement = statements.getInsertStatement();
if (!db.isDbLockedByCurrentThread())
{
break MISSING_BLOCK_LABEL_44;
}
sqlitestatement;
JVM INSTR monitorenter ;
long l1;
bindValues(sqlitestatement, obj);
l1 = sqlitestatement.executeInsert();
sqlitestatement;
JVM INSTR monitorexit ;
return l1;
Exception exception2;
exception2;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception2;
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
long l;
bindValues(sqlitestatement, obj);
l = sqlitestatement.executeInsert();
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
return l;
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
}
protected abstract boolean isEntityUpdateable();
public Object load(Object obj)
{
assertSinglePk();
if (obj != null) goto _L2; else goto _L1
_L1:
Object obj1 = null;
_L4:
return obj1;
_L2:
if (identityScope == null)
{
break; /* Loop/switch isn't completed */
}
obj1 = identityScope.get(obj);
if (obj1 != null) goto _L4; else goto _L3
_L3:
String s = statements.getSelectByKey();
String as[] = new String[1];
as[0] = obj.toString();
return loadUniqueAndCloseCursor(db.rawQuery(s, as));
}
public List loadAll()
{
return loadAllAndCloseCursor(db.rawQuery(statements.getSelectAll(), null));
}
protected List loadAllAndCloseCursor(Cursor cursor)
{
List list = loadAllFromCursor(cursor);
cursor.close();
return list;
Exception exception;
exception;
cursor.close();
throw exception;
}
protected List loadAllFromCursor(Cursor cursor)
{
int i = cursor.getCount();
ArrayList arraylist = new ArrayList(i);
if (cursor instanceof CrossProcessCursor)
{
CursorWindow cursorwindow = ((CrossProcessCursor)cursor).getWindow();
boolean flag;
if (cursorwindow != null)
{
if (cursorwindow.getNumRows() == i)
{
cursor = new FastCursor(cursorwindow);
} else
{
DaoLog.d((new StringBuilder()).append("Window vs. result size: ").append(cursorwindow.getNumRows()).append("/").append(i).toString());
}
}
}
if (!cursor.moveToFirst())
{
break MISSING_BLOCK_LABEL_136;
}
if (identityScope != null)
{
identityScope.lock();
identityScope.reserveRoom(i);
}
do
{
arraylist.add(loadCurrent(cursor, 0, false));
flag = cursor.moveToNext();
} while (flag);
if (identityScope != null)
{
identityScope.unlock();
}
return arraylist;
Exception exception;
exception;
if (identityScope != null)
{
identityScope.unlock();
}
throw exception;
}
public Object loadByRowId(long l)
{
String as[] = new String[1];
as[0] = Long.toString(l);
return loadUniqueAndCloseCursor(db.rawQuery(statements.getSelectByRowId(), as));
}
protected final Object loadCurrent(Cursor cursor, int i, boolean flag)
{
if (identityScopeLong == null) goto _L2; else goto _L1
_L1:
if (i == 0) goto _L4; else goto _L3
_L3:
Object obj2;
boolean flag1;
flag1 = cursor.isNull(i + pkOrdinal);
obj2 = null;
if (!flag1) goto _L4; else goto _L5
_L5:
return obj2;
_L4:
long l = cursor.getLong(i + pkOrdinal);
if (flag)
{
obj2 = identityScopeLong.get2(l);
} else
{
obj2 = identityScopeLong.get2NoLock(l);
}
if (obj2 == null)
{
Object obj5 = readEntity(cursor, i);
attachEntity(obj5);
if (flag)
{
identityScopeLong.put2(l, obj5);
return obj5;
} else
{
identityScopeLong.put2NoLock(l, obj5);
return obj5;
}
}
continue; /* Loop/switch isn't completed */
_L2:
Object obj3;
if (identityScope == null)
{
break; /* Loop/switch isn't completed */
}
obj3 = readKey(cursor, i);
if (i == 0)
{
break; /* Loop/switch isn't completed */
}
obj2 = null;
if (obj3 == null) goto _L5; else goto _L6
_L6:
if (flag)
{
obj2 = identityScope.get(obj3);
} else
{
obj2 = identityScope.getNoLock(obj3);
}
if (obj2 == null)
{
Object obj4 = readEntity(cursor, i);
attachEntity(obj3, obj4, flag);
return obj4;
}
if (true) goto _L5; else goto _L7
_L7:
Object obj1;
if (i == 0)
{
break; /* Loop/switch isn't completed */
}
obj1 = readKey(cursor, i);
obj2 = null;
if (obj1 == null) goto _L5; else goto _L8
_L8:
Object obj = readEntity(cursor, i);
attachEntity(obj);
return obj;
}
protected final Object loadCurrentOther(AbstractDao abstractdao, Cursor cursor, int i)
{
return abstractdao.loadCurrent(cursor, i, true);
}
protected Object loadUnique(Cursor cursor)
{
if (!cursor.moveToFirst())
{
return null;
}
if (!cursor.isLast())
{
throw new DaoException((new StringBuilder()).append("Expected unique result, but count was ").append(cursor.getCount()).toString());
} else
{
return loadCurrent(cursor, 0, true);
}
}
protected Object loadUniqueAndCloseCursor(Cursor cursor)
{
Object obj = loadUnique(cursor);
cursor.close();
return obj;
Exception exception;
exception;
cursor.close();
throw exception;
}
public QueryBuilder queryBuilder()
{
return QueryBuilder.internalCreate(this);
}
public transient List queryRaw(String s, String as[])
{
return loadAllAndCloseCursor(db.rawQuery((new StringBuilder()).append(statements.getSelectAll()).append(s).toString(), as));
}
public transient Query queryRawCreate(String s, Object aobj[])
{
return queryRawCreateListArgs(s, Arrays.asList(aobj));
}
public Query queryRawCreateListArgs(String s, Collection collection)
{
return Query.internalCreate(this, (new StringBuilder()).append(statements.getSelectAll()).append(s).toString(), collection.toArray());
}
protected abstract Object readEntity(Cursor cursor, int i);
protected abstract void readEntity(Cursor cursor, Object obj, int i);
protected abstract Object readKey(Cursor cursor, int i);
public void refresh(Object obj)
{
Object obj1;
Cursor cursor;
assertSinglePk();
obj1 = getKeyVerified(obj);
String s = statements.getSelectByKey();
String as[] = new String[1];
as[0] = obj1.toString();
cursor = db.rawQuery(s, as);
if (!cursor.moveToFirst())
{
throw new DaoException((new StringBuilder()).append("Entity does not exist in the database anymore: ").append(obj.getClass()).append(" with key ").append(obj1).toString());
}
break MISSING_BLOCK_LABEL_107;
Exception exception;
exception;
cursor.close();
throw exception;
if (!cursor.isLast())
{
throw new DaoException((new StringBuilder()).append("Expected unique result, but count was ").append(cursor.getCount()).toString());
}
readEntity(cursor, obj, 0);
attachEntity(obj1, obj, true);
cursor.close();
return;
}
public void update(Object obj)
{
SQLiteStatement sqlitestatement;
assertSinglePk();
sqlitestatement = statements.getUpdateStatement();
if (!db.isDbLockedByCurrentThread())
{
break MISSING_BLOCK_LABEL_41;
}
sqlitestatement;
JVM INSTR monitorenter ;
updateInsideSynchronized(obj, sqlitestatement, true);
sqlitestatement;
JVM INSTR monitorexit ;
return;
Exception exception2;
exception2;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception2;
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
updateInsideSynchronized(obj, sqlitestatement, true);
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
return;
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
}
public void updateInTx(Iterable iterable)
{
SQLiteStatement sqlitestatement;
sqlitestatement = statements.getUpdateStatement();
db.beginTransaction();
sqlitestatement;
JVM INSTR monitorenter ;
if (identityScope != null)
{
identityScope.lock();
}
for (Iterator iterator = iterable.iterator(); iterator.hasNext(); updateInsideSynchronized(iterator.next(), sqlitestatement, false)) { }
break MISSING_BLOCK_LABEL_105;
Exception exception2;
exception2;
if (identityScope != null)
{
identityScope.unlock();
}
throw exception2;
Exception exception1;
exception1;
sqlitestatement;
JVM INSTR monitorexit ;
throw exception1;
Exception exception;
exception;
db.endTransaction();
throw exception;
if (identityScope != null)
{
identityScope.unlock();
}
sqlitestatement;
JVM INSTR monitorexit ;
db.setTransactionSuccessful();
db.endTransaction();
return;
}
public transient void updateInTx(Object aobj[])
{
updateInTx(((Iterable) (Arrays.asList(aobj))));
}
protected void updateInsideSynchronized(Object obj, SQLiteStatement sqlitestatement, boolean flag)
{
bindValues(sqlitestatement, obj);
int i = 1 + config.allColumns.length;
Object obj1 = getKey(obj);
if (obj1 instanceof Long)
{
sqlitestatement.bindLong(i, ((Long)obj1).longValue());
} else
{
if (obj1 == null)
{
throw new DaoException("Cannot update entity without key - was it inserted before?");
}
sqlitestatement.bindString(i, obj1.toString());
}
sqlitestatement.execute();
attachEntity(obj1, obj, flag);
}
protected abstract Object updateKeyAfterInsert(Object obj, long l);
protected void updateKeyAfterInsertAndAttach(Object obj, long l, boolean flag)
{
if (l != -1L)
{
attachEntity(updateKeyAfterInsert(obj, l), obj, flag);
return;
} else
{
DaoLog.w("Could not insert row (executeInsert returned -1)");
return;
}
}
}